package com.sfpay.coreplatform.member.persistence.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.sfpay.coreplatform.member.common.enums.CertType;
import com.sfpay.coreplatform.member.common.enums.MemberLockStatus;
import com.sfpay.coreplatform.member.common.enums.MemberType;
import com.sfpay.coreplatform.member.valueobject.tmo.OperatorInfo;

public interface IOperatorManagerDao {
	
	
	/**
	 * 
	 *
	 * 方法说明：添加操作员
	 *
	 * @param operator
	 */
	public void addOperatorInfo(OperatorInfo operator);
		
	/**
	 * 
	 *
	 * 方法说明：修改操作员
	 *
	 * @param operator
	 */
	public void updateOperById(OperatorInfo operator);
	
	/**
	 * 
	 *
	 * 方法说明：根据会员号修改操作员
	 *
	 * @param operator
	 */
	public void updatePersonOperatorByMemberNo(OperatorInfo operator);
	
	/**
	 * 
	 *
	 * 方法说明：根据会员号，手机，邮箱，登入名修改企业操作员
	 *
	 * @param operator	修改后的操作员信息
	 * @param memberNo	会员号
	 * @param mobile	手机号
	 * @param email		邮箱
	 * @param loginName	登录名
	 */
	public void updateEnterpriseOperator(@Param("operator")OperatorInfo operator,
			@Param("memberNo")Long memberNo,@Param("mobile") String mobile,
			@Param("email") String email, @Param("loginName")String loginName);
	 
	/**
	 * 注销 企业操作员
	 * @param Id
	 *  
	 */
	public void cancelOperator(@Param("id")Long Id);
	
	/**
	 * 操作
	 * @param memberNo
	 * @return
	 */
	public List<OperatorInfo>  queryOperatorList(@Param("memberNo") Long memberNo);
	
	/**
	 *  登录手机 或邮件或登录名，证件类型+证件号码，查询操作员信息
	 * @param mobile    手机
	 * @param email		邮箱
	 * @param loginName	登入名
	 * @param certType 证件类型
	 * @param certNo   证件号码
	 * @return
	 */
	public OperatorInfo   queryOperator(@Param("mobile") String mobile,@Param("email") String email,@Param("loginName") String loginName,
			@Param("certType")CertType certType,@Param("certNo")String certNo,@Param("memberType")MemberType memberType);
	
	/**
	 * 由登录手机 或邮件或登录名，证件类型+证件号码，查询是否存在重复
	 * @param mobile    手机
	 * @param email		邮箱
	 * @param loginName	登入名
	 * @param certType 证件类型
	 * @param certNo   证件号码
	 * @return
	 */
	public int  queryOperatorIsExist(@Param("memberNo")Long memberNo,
			@Param("mobile") String mobile,@Param("email") String email,@Param("loginName") String loginName,
			@Param("certType")CertType certType,@Param("certNo")String certNo,@Param("memberType")MemberType memberType);
	
	/**
	 * 
	 *
	 * 方法说明:会员登入的时候更新操作员信息
	 *
	 * @param operatorInfo			原信息
	 * @param lockStatus			更新后状态
	 * @param needUpdateLoginSuccTime是否需要更新成功登入时间：true需要，false不需要
	 * @return
	 */
	public int updateOperatorWhenLogin(@Param("operatorInfo")OperatorInfo operatorInfo,
			@Param("lockStatus")MemberLockStatus  lockStatus,@Param("needUpdateLoginSuccTime")boolean  needUpdateLoginSuccTime );

	/**
	 * 
	 *
	 * 方法说明：更新操作员密码
	 *
	 * @param mobile
	 * @param email
	 * @param loginName
	 * @param memberType
	 * @param oldPwd
	 * @param newPwd
	 * @return
	 */
	public int  updateOperatorLoginPwd(@Param("mobile") String mobile,@Param("email") String email,
			@Param("loginName") String loginName,@Param("memberType")MemberType memberType,
			@Param("oldPwd")String oldPwd,@Param("newPwd")String newPwd);

	/**
	 * 
	 *
	 * 方法说明：根据操作员表ID查询操作员信息
	 *
	 * @param operatorId
	 * @return
	 */
	public OperatorInfo queryOperatorByID(@Param("operatorId")Long operatorId);
}
